﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using DataAccess;
using DevExpress.XtraEditors;
using QuanLyKhachSan.FormThemCapNhat;
using QuanLyKhachSan.FormTimKiem;
using BLL;
using NLog;

namespace QuanLyKhachSan
{
    public partial class TabLoaiPhong : DevExpress.XtraEditors.XtraUserControl, IGeneatetabName
    {
        LoaiPhongManager lpManager;
        protected static Logger _logger = LogManager.GetCurrentClassLogger();
        public TabLoaiPhong()
        {
            InitializeComponent();
            lpManager = new LoaiPhongManager();
        }

        public string Getname()
        {
            return "Loại phòng";
        }

        private void btnThem_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            Them();
        }

        private void Them()
        {
            _logger.Info(Commons.ToString()+", Chọn thao tác thêm loại phòng.");
            FormLoaiPhongCapNhat frmLoaiPhongCapNhat = new FormLoaiPhongCapNhat();
            frmLoaiPhongCapNhat.ShowDialog();
            if (frmLoaiPhongCapNhat.isInserted)
            {
                XtraMessageBox.Show("Thêm thành công !");
                loadDB();
            }
        }

        private void loadDB()
        {
            List<LoaiPhong> listLPhongs = lpManager.LayDanhSach().Result;
            var focusedRowHandle = gridView1.FocusedRowHandle;
            gridControlLoaiPhong.DataSource = listLPhongs;
            gridView1.BestFitColumns();
            gridView1.FocusedRowHandle = focusedRowHandle;
        }

        private void btnCapNhat_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            CapNhat();
        }

        private void CapNhat()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác cập nhật.");
            var loaiphongSelected = GetRowSelected();
            if (loaiphongSelected != null)
            {
                FormLoaiPhongCapNhat frm = new FormLoaiPhongCapNhat(loaiphongSelected);
                frm.btnThaoTac.Text = "Cập nhật";
                frm.txtMaLoaiPhong.Enabled = false;
                frm.ShowDialog();
                if (frm.isInserted)
                {
                    XtraMessageBox.Show("Cập nhật thành công");
                    loadDB();
                }
            }
            else
            {
                XtraMessageBox.Show("Bạn phải chọn 1 loại phòng để cập nhật.", "thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private LoaiPhong GetRowSelected()
        {
            int rowSelected = gridView1.GetSelectedRows()[0];
            return gridView1.GetRow(rowSelected) as LoaiPhong;
        }

        private void btnTimKiem_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            TimKiem();
        }

        private void TimKiem()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác tìm kiếm.");
            var frmTimLoaiPhong = new FormTimLoaiPhong();
            if (frmTimLoaiPhong.ShowDialog() == DialogResult.OK)
            {
                XtraMessageBox.Show("Kết quả tìm thấy là: " + frmTimLoaiPhong.Result.Count());
                gridControlLoaiPhong.DataSource = frmTimLoaiPhong.Result.ToList();
            }
        }

        private void btnXoa_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            Xoa();
        }

        private void Xoa()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác xóa.");
            LoaiPhong lp = GetRowSelected();
            DialogResult confirm = XtraMessageBox.Show("Bạn có chắc chắn xóa không", "Xác nhận", MessageBoxButtons.YesNo,
                 MessageBoxIcon.Question);
            if (confirm == DialogResult.Yes)
            {
                ActionResult aResult = lpManager.Xoa(lp);
                if (!aResult.Exceptions.Any())
                {
                    XtraMessageBox.Show("Xóa thành công");
                    loadDB();
                }
                else
                {
                    string s = "";
                    foreach (var ex in aResult.Exceptions)
                    {
                        s += ex.Message + "\n";
                    }
                    XtraMessageBox.Show(s);
                    loadDB();
                }
            }
        }

        private void barButtonItemThem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Them();
        }

        private void barButtonItemCapNhat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            CapNhat();
        }

        private void barButtonItemTimKiem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gridView1.OptionsFind.AlwaysVisible = !gridView1.OptionsFind.AlwaysVisible;
        }

        private void barButtonItem4_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadDB();
        }

        private void barButtonItem5_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Xoa();
        }

        private void TabLoaiPhong_Load(object sender, EventArgs e)
        {
            loadDB();
        }

        private void thêmLoạiPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Them();
        }

        private void cậpNhậtLoạiPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CapNhat();
        }

        private void xóaLoạiPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Xoa();
        }

        private void tìmKiếmLoạiPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TimKiem();
        }

        private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {
            var lp = GetRowSelected();
            var rs = lpManager.CapNhat(lp);
            if (lp != null)
            {
                XtraMessageBox.Show(rs.Sucess() ? "Cập nhật thành công" : rs.GetErrorMessage());
            }
        }

    }
}
